package assert

/**
断言工具类 - 数组、切片篇
*/

// ArrayExists 判断数组中是否存在
func ArrayExists[T any](arr []T, target T, compare func(a, b T) bool) bool {
	if arr == nil {
		return false
	}
	for _, item := range arr {
		if compare(item, target) {
			return true
		}
	}
	return false
}

// ArrayExistsI 判断数组中是否存在
func ArrayExistsI[T any](arr []interface{}, target T, compare func(a, b T) bool) bool {
	if arr == nil {
		return false
	}
	for _, item := range arr {
		if compare(item.(T), target) {
			return true
		}
	}
	return false
}

// ArrExists 判断数组中是否存在
func ArrExists[T comparable](arr []T, target T) bool {
	return ArrayExists(arr, target, func(a, b T) bool {
		return a == b
	})
}

// ArrExistsI 判断数组中是否存在
func ArrExistsI[T comparable](arr []interface{}, target T) bool {
	return ArrayExistsI(arr, target, func(a, b T) bool {
		return a == b
	})
}

// ArrayIsEmptyI 判断数组是否为空
func ArrayIsEmptyI(arr []interface{}) bool {
	return arr == nil || len(arr) == 0
}

// ArrayIsEmpty 判断数组是否为空
func ArrayIsEmpty[T any](arr []T) bool {
	return arr == nil || len(arr) == 0
}
